#!/bin/bash
source /etc/profile
# 基础变量
DATE=$(date +%Y%m%d%H%M)

# Java ENV

# 运行应用存放路径
APP_PATH=/root/opt/jar
BAK_PATH=$APP_PATH/backup
# 构建文件路径
BUILD_PATH=/root/opt/build

# 应用名称
APP_NAME=demo

# 初始化文件夹
function init() {
    if [ ! -d "$APP_PATH" ]; then
         mkdir -p $APP_PATH
    fi

    if [ ! -d "$BAK_PATH" ]; then
         mkdir -p $BAK_PATH
    fi

    if [ ! -d "$BUILD_PATH" ]; then
         mkdir -p $BUILD_PATH
    fi
}


# 备份
function backup() {
    # 如果不存在，则无需备份
    if [ ! -f "$APP_PATH/$APP_NAME.jar" ]; then
        echo "[backup] $APP_PATH/$APP_NAME.jar 不存在，跳过备份"
    # 如果存在，则备份到 backup 目录下，使用时间作为后缀
    else
        echo "[backup] 开始备份 $APP_PATH ..."
        cp $APP_PATH/$APP_NAME.jar $BAK_PATH/$APP_NAME-$DATE.jar
        echo "[backup] 备份 $APP_NAME 完成"
    fi
}

# 检查程序是否在运行
is_exist(){
    # 获取PID
    PID=$(ps -ef | grep ${APP_NAME} | grep -v $0 | grep -v grep | awk '{print $2}')
    # -z "${pid}"判断pid是否存在，如果不存在返回1，存在返回0
    if [[ -z "${PID}" ]]; then
            # 如果进程不存在返回1
            return 1
    else
            # 进程存在返回0
            return 0
    fi
}

# 定义启动程序函数
start(){
    is_exist
    if [[ $? -eq "0" ]]; then
            echo "${APP_NAME} 正在运行中..., PID=${PID}"
    else
            nohup java -jar ${APP_PATH}/${APP_NAME}.jar >xxx.log 2>&1	& PID=$(echo $!)
            echo "${APP_NAME} 启动成功^_^, PID=$!"
    fi
}

# 停止进程函数
stop(){
        is_exist
        if [[ $? -eq "0" ]]; then
                kill -9 ${PID}
                echo "${APP_NAME} 进程已停止, PID=${PID}"
        else    
                echo "${APP_NAME} 已停止!"
        fi
}

# 最新构建代码，移动到项目环境
function transfer() {
    echo "[transfer] 开始转移 $APP_NAME.jar"

    # 删除原 jar 包
    if [ ! -f "$APP_PATH/$APP_NAME.jar" ]; then
        echo "[transfer] $APP_PATH/$APP_NAME.jar 不存在，跳过删除"
    else
        echo "[transfer] 移除 $APP_PATH/$APP_NAME.jar 完成"
        rm $APP_PATH/$APP_NAME.jar
    fi

    # 复制新 jar 包
    echo "[transfer] 从 $BUILD_PATH 中获取 $APP_NAME.jar 并迁移至 $APP_PATH ...."
    cp $BUILD_PATH/$APP_NAME.jar $APP_PATH

    echo "[transfer] 转移 $APP_NAME.jar 完成"
}

# 查看进程状态
status(){
        is_exist
        if [[ $? -eq "0" ]]; then
                echo "${APP_NAME} 正在运行中..., PID=${PID}"
        else    
                echo "${APP_NAME} 已停止运行!"
        fi
}

# 部署
function deploy() {
    # 初始化文件夹
    init
    # 备份原 jar
    backup
    # 停止 Java 服务
    stop
    # 部署，拷贝新 jar
    transfer
    # 启动 Java 服务
    start
    # 健康检查
    status
}

deploy
